perm filename MAKE.SAI[4,ALS]2 blob
sn#054420 filedate 1973-07-19 generic text, type T, neo UTF8
00010 BEGIN "MAKE"
00020
00030 DEFINE ⊂="COMMENT";
00040 DEFINE TB="'11";
00050 DEFINE INSIZ="24";
00060 REQUIRE "BLOCKS.HDR[4,ALS]" SOURCE_FILE;
00070 INTEGER I,J,K,L,Q,P,CHAN1,CHAN2,CHAN3,CHAN4,EOF,HPOINT;
00080 INTEGER HPNT1,HPNT2,HPNT3,HPNT4;
00090 STRING READ1,READ2,READ3,READ4,READ5;
00100 INTEGER ARRAY INSAVE[0:4];
00110
00120
00130 CHAN1←1; CHAN2←2; CHAN3←3; CHAN4←4;
00140 HEADIN; ⊂ Bring in header information;
00150 OUTSTR(CRLF&"This routine is used to generate SIGNATURE TABLES."&CRLF);
00160 OUTSTR("It will ask a number of questions which must be answered by"&CRLF
00170 &" typing the required information followed by a CR."&CRLF);
00180
00190 OUTSTR("PH list and H list table contains"&CRLF);
00200 OUTSTR(CRLF&"PH"&TB&"Significant features"&CRLF);
00210 FOR I←0 STEP 1 UNTIL 63 DO BEGIN
00220 IF PHLIST[I]=0 THEN DONE;
00230 OUTSTR(CVXSTR(PHLIST[I])&TB);
00240 HPOINT←POINT(1,HLIST[I],-1);
00250 FOR J←0 STEP 1 UNTIL 35 DO
00260 IF (K←ILDB(HPOINT))=1 THEN OUTSTR(CVXSTR(FLIST[J])&" ");
00270 OUTSTR(CRLF);
00280 END;
00290
00300 OUTSTR("Enter corrections or additions. Type PH symbol followed by features. "&CRLF);
00310 OUTSTR("After each CR you will be prompted as to what is expected next."&CRLF);
00320 K←0;
00330 WHILE J≥0 DO BEGIN
00340 IF (READ1←STRIN("PH symbol = ")) ="" THEN DONE;
00350 K←K+1;
00360 FOR I←0 STEP 1 UNTIL 63 DO BEGIN
00370 IF PHLIST[I]=0 THEN PHLIST[I]←CVSIX(READ1);
00380 IF CVSIX(READ1)=PHLIST[I] THEN DONE;
00390 END;
00400 HLIST[I]←0;
00410 WHILE J≥0 DO BEGIN
00420 WHILE J≥0 DO BEGIN
00430 IF (READ2←STRIN("F="))="" THEN DONE;
00440 HPOINT←POINT(1,HLIST[I],-1);
00450 FOR J←0 STEP 1 UNTIL 35 DO BEGIN
00460 IBP(HPOINT);
00470 IF FLIST[J]=0 THEN BEGIN FLIST[J]←CVSIX(READ2);
00480 OUTSTR(READ2&" added to feature list"&CRLF); END;
00490 IF CVSIX(READ2)=FLIST[J] THEN DONE;
00500 END;
00510 IF J≥36 THEN OUTSTR("NOT FOUND"&CRLF) ELSE DONE;
00520 END;
00530 IF READ2 ="" THEN DONE;
00540 DPB(1,HPOINT);
00550 END;
00560 CLRBUF;
00570 END;
00580 OUTSTR(CRLF);
00590 IF K≠0 THEN BEGIN
00600 OUTSTR("PH list and H list table now contains"&CRLF);
00610 OUTSTR(CRLF&"PH"&TB&"Significant features"&CRLF);
00620 FOR I←0 STEP 1 UNTIL 63 DO BEGIN
00630 IF PHLIST[I]=0 THEN DONE;
00640 OUTSTR(CVXSTR(PHLIST[I])&TB);
00650 HPOINT←POINT(1,HLIST[I],-1);
00660 FOR J←0 STEP 1 UNTIL 35 DO
00670 IF (K←ILDB(HPOINT))=1 THEN OUTSTR(CVXSTR(FLIST[J])&" ");
00680 OUTSTR(CRLF);
00690 END;
00700 OUTSTR(CRLF);
00710 END;
00010 IF (STRIN("Do you want to start fresh from here on YorCR = "))="Y" THEN
00020 FOR I←0 STEP 1 UNTIL TABNUM-1 DO BEGIN
00030 NAMES[I]←PARENT[I]←LRN1[I]←LRN2[I]←LRN3[I]←LRN4[I]←0;
00040 IN1[I]←IN2[I]←IN3[I]←IN4[I]←OUT1[I]←OUT2[I]←OUT3[I]←OUT4[I]←0; END;
00050
00060 WHILE TRUE DO BEGIN "OVERAL"
00070 IF NAMES[0]=0 THEN OUTSTR("All tables have been zeroed"&crlf) else begin
00080
00090 OUTSTR(CRLF&"The following tables exist"&CRLF);
00100 OUTSTR("Name"&TB&"Parent"&TB&"Out1 Lev1 Out2 Lev2 "&
00110 "Out3 Lev3 Out4 Lev4 "&
00120 "IN1 IN2 IN3 IN4"&CRLF);
00130 SETFORMAT(3,0);
00140 FOR I←0 STEP 1 UNTIL TABNUM DO BEGIN
00150 IF NAMES[I]=0 THEN DONE;
00160 J←(IN1[I] LAND '77);K←(IN2[I] LAND '77);
00170 IF (IN3[I]=0) THEN READ1←" "
00180 ELSE READ1←CVXSTR(INNAM[IN3[I] LAND '77])[1 TO 5];
00190 IF (IN4[I]=0) THEN READ2←" " ELSE
00200 READ2←CVXSTR(INNAM[IN4[I] LAND '77])[1 TO 5];
00210 OUTSTR(CVXSTR(NAMES[I])&TB&CVXSTR(PARENN[I])&TB&
00220 CVXSTR(OUT1[I])&CVS(LDB(POINT(9,LEVEL[I],8)))&" "&
00230 CVXSTR(OUT2[I])&CVS(LDB(POINT(9,LEVEL[I],17)))&" ");
00240 IF OUT3[I]=0 THEN OUTSTR(" ") ELSE
00250 OUTSTR(CVXSTR(OUT3[I])&CVS(LDB(POINT(9,LEVEL[I],26)))&" ");
00260 IF OUT4[I]=0 THEN OUTSTR(" ") ELSE
00270 OUTSTR(CVXSTR(OUT4[I])&CVS(LDB(POINT(9,LEVEL[I],35)))&" ");
00280 OUTSTR(CVXSTR(INNAM[J])[1 TO 5]&CVXSTR(INNAM[K])[1 TO 5]
00290 &READ1&READ2&CRLF); END; END;
00300
00310 CLRBUF;
00320
00330 WHILE TRUE DO BEGIN "OUTSID"
00340
00350 WHILE TRUE DO BEGIN "GETNAM"
00360 OUTSTR(CRLF&"Now type the name of a table to be modified or added."&CRLF);
00370 IF (READ1←STRIN("A CR. only, terminates the session. Name= "))="" THEN DONE;
00380 J←CVSIX(READ1);
00390 FOR I←0 STEP 1 UNTIL TABNUM DO IF NAMES[I]=J THEN DONE ELSE
00400 IF NAMES[I]=0 THEN DONE;
00410 IF NAMES[I]=J THEN DONE; CLRBUF;
00420 IF (READ2←STRIN("Is this a new table = "))="N" then
00430 OUTSTR("Try again"&CRLF) ELSE BEGIN NAMES[I]←J; DONE END; END "GETNAM";
00440 IF READ1="" THEN DONE;
00450
00460 WHILE TRUE DO BEGIN "PARENT" ⊂ SIG uses index 13 for start of OUTPUTS array;
00470 READ2←STRIN("Type name of parent (same name used for gating)= ");
00480 PARENN[I]←K←CVSIX(READ2);
00490 IF READ2="" THEN BEGIN PARENT[I]←0; DONE; END;
00500 FOR J←0 STEP 1 UNTIL TABNUM-1 DO IF K=OUT1[J] THEN DONE;
00510 IF J<TABNUM THEN BEGIN
00520 PARENT[I]←'331113000000+J; DONE END ELSE
00530 FOR J←0 STEP 1 UNTIL TABNUM-1 DO IF K=OUT2[J] THEN DONE;
00540 IF J<TABNUM THEN BEGIN
00550 PARENT[I]←'221113000000+J; DONE END ELSE
00560 FOR J←0 STEP 1 UNTIL TABNUM-1 DO IF K=OUT3[J] THEN DONE;
00570 IF J<TABNUM THEN BEGIN
00580 PARENT[I]←'111113000000+J; DONE END ELSE
00590 FOR J←0 STEP 1 UNTIL TABNUM-1 DO IF K=OUT4[J] THEN DONE;
00600 IF J<TABNUM THEN BEGIN
00610 PARENT[I]←'001113000000+J; DONE END;
00620 OUTSTR("Name not found. "); END "PARENT";
00630
00640 OUTSTR("Up to 4 output names may be specified (Ph or Feature)"&CRLF);
00650 FOR L←0 STEP 1 UNTIL 3 DO BEGIN "OUTPUT"
00660 WHILE TRUE DO BEGIN
00670 IF (READ4←STRIN("Type output name ="))="" THEN DONE;
00680 IF L≤3 THEN OUT4[I]←0; IF L≤2 THEN OUT3[I]←0; IF L=0 THEN OUT2[I]←0;
00690 K←CVSIX(READ4);
00700 READ5←STRIN("Type counter level for this output (0 to 511)= ");
00710 Q←CVD(READ5);
00720 IF L=0 THEN LEVEL[I]←(Q LSH 27) ELSE
00730 IF L=1 THEN LEVEL[I]←LEVEL[I]+(Q LSH 18) ELSE
00740 IF L=2 THEN LEVEL[I]←LEVEL[I] +(Q LSH 9) ELSE
00750 LEVEL[I]←LEVEL[I]+Q;
00760 FOR J←0 STEP 1 UNTIL 63 DO IF K=PHLIST[J] THEN DONE;
00770 IF J≤63 THEN BEGIN
00780 IF L=0 THEN BEGIN OUT1[I]←K; LRN1[I]←0; END ELSE
00790 IF L=1 THEN BEGIN OUT2[I]←K; LRN2[I]←0; END ELSE
00800 IF L=2 THEN BEGIN OUT3[I]←K; LRN3[I]←0; END ELSE
00810 IF L=3 THEN BEGIN OUT4[I]←K; LRN4[I]←0; END;
00820 DONE END;
00830 IF J≥64 THEN BEGIN
00840 HPNT1←POINT(1,LRN1[I],-1);
00850 HPNT2←POINT(1,LRN2[I],-1);
00860 HPNT3←POINT(1,LRN3[I],-1);
00870 HPNT4←POINT(1,LRN4[I],-1);
00880 FOR J←0 STEP 1 UNTIL 35 DO BEGIN
00890 IF L=0 THEN IBP(HPNT1); IF L=1 THEN IBP(HPNT2);
00900 IF L=2 THEN IBP(HPNT3); IF L=3 THEN IBP(HPNT4);
00910 IF K=FLIST[J] THEN DONE; END; END;
00920 IF J≤35 THEN BEGIN
00930 IF L=0 THEN BEGIN OUT1[I]←K; DPB(1,HPNT1); END ELSE
00940 IF L=1 THEN BEGIN OUT2[I]←K; DPB(1,HPNT2); END ELSE
00950 IF L=2 THEN BEGIN OUT3[I]←K; DPB(1,HPNT3); END ELSE
00960 IF L=3 THEN BEGIN OUT4[I]←K; DPB(1,HPNT4); END;
00970 DONE END;
00980 OUTSTR("Output name not found. "); END;
00990 IF READ4="" THEN BEGIN IF L≤2 THEN OUT3[I]←0; IF L≤3 THEN OUT4[I]←0;
01000 DONE END; END "OUTPUT";
01010
01020 OUTSTR("2, 3 or 4 inputs may be specified"&CRLF);
01030 FOR L←0 STEP 1 UNTIL 3 DO BEGIN "INPUTS"
01040 WHILE TRUE DO BEGIN
01050 IF (READ3←STRIN("Type INPUT NAME ="))="" THEN
01060 IF L>1 THEN DONE;
01070 K←CVSIX(READ3);
01080 FOR J←0 STEP 1 UNTIL INSIZ-1 DO IF K=INNAM[J] THEN DONE;
01090 IF J=INSIZ THEN OUTSTR("Input name not found. ") ELSE DONE;
01100 END; IF READ3="" THEN DONE; INSAVE[L]←J;
01110 END "INPUTS";
01120
01130
01140 IF L=2 THEN BEGIN ⊂ SIG uses index 7 for start of INDAT array;
01150 IN1[I]←'020407000000+INSAVE[0];
01160 IN2[I]←'020407000000+INSAVE[1]; IN3[I]←IN4[I]←0; END;
01170
01180 IF L=3 THEN BEGIN
01190 IN1[I]←'030307000000+INSAVE[0];
01200 IN2[I]←'030307000000+INSAVE[1];
01210 IN3[I]←'040207000000+INSAVE[2]; IN4[I]←0; END;
01220
01230 IF L=4 THEN BEGIN
01240 IN1[I]←'040207000000+INSAVE[0];
01250 IN2[I]←'040207000000+INSAVE[1];
01260 IN3[I]←'040207000000+INSAVE[2];
01270 IN4[I]←'040207000000+INSAVE[3]; END;
01280 END "OUTSID";
00010 CHAN1←GETCHAN;
00020 CLOSE(CHAN1);
00030 OPEN(CHAN1,"DSK",'10,0,10,0,0,EOF);
00040 ENTER(CHAN1,"TABHED.DAT",0);
00050 ARRYOUT(CHAN1,INNAM[0],INSIZ);
00060 ARRYOUT(CHAN1,FLIST[0],36);
00070 ARRYOUT(CHAN1,PHLIST[0],64);
00080 ARRYOUT(CHAN1,HLIST[0],64);
00090 ARRYOUT(CHAN1,NAMES[0],TABNUM);
00100 ARRYOUT(CHAN1,PARENT[0],TABNUM);
00110 ARRYOUT(CHAN1,PARENN[0],TABNUM);
00120 ARRYOUT(CHAN1,GATE[0],TABNUM);
00130 ARRYOUT(CHAN1,IN1[0],TABNUM);
00140 ARRYOUT(CHAN1,IN2[0],TABNUM);
00150 ARRYOUT(CHAN1,IN3[0],TABNUM);
00160 ARRYOUT(CHAN1,IN4[0],TABNUM);
00170 ARRYOUT(CHAN1,OUT1[0],TABNUM);
00180 ARRYOUT(CHAN1,OUT2[0],TABNUM);
00190 ARRYOUT(CHAN1,OUT3[0],TABNUM);
00200 ARRYOUT(CHAN1,OUT4[0],TABNUM);
00210 ARRYOUT(CHAN1,LRN1[0],TABNUM);
00220 ARRYOUT(CHAN1,LRN2[0],TABNUM);
00230 ARRYOUT(CHAN1,LRN3[0],TABNUM);
00240 ARRYOUT(CHAN1,LRN4[0],TABNUM);
00250 ARRYOUT(CHAN1,LEVEL[0],TABNUM);
00260
00270 CLOSE(CHAN1);
00280 RELEASE(CHAN1);
00290 IF (READ1←STRIN("Do you want to review tables "))≠"Y" THEN
00300 DONE ; END "OVERAL";
00310
00320 CLOSE(CHAN2);
00330 OPEN(CHAN2,"DSK",0,0,10,0,0,EOF);
00340 ENTER(CHAN2,"TABLES.DOC",0);
00350 OUT(CHAN2,"PH list and H list table contains"&CRLF);
00360 OUT(CHAN2,CRLF&"PH"&TB&"Significant features"&CRLF);
00370 FOR I←0 STEP 1 UNTIL 63 DO BEGIN
00380 IF PHLIST[I]=0 THEN DONE;
00390 OUT(CHAN2,CVXSTR(PHLIST[I])&TB);
00400 HPOINT←POINT(1,HLIST[I],-1);
00410 FOR J←0 STEP 1 UNTIL 35 DO
00420 IF (K←ILDB(HPOINT))=1 THEN OUT(CHAN2,CVXSTR(FLIST[J])&" ");
00430 OUT(CHAN2,CRLF);
00440 END;
00450
00460 OUT(CHAN2,CRLF&"The following tables exist"&CRLF);
00470 OUT(CHAN2,"Name"&TB&"Parent"&TB&"Out1 Lev1 Out2 Lev2 "&
00480 "Out3 Lev3 Out4 Lev4 "&
00490 "IN1 IN2 IN3 IN4"&CRLF);
00500 SETFORMAT(3,0);
00510 FOR I←0 STEP 1 UNTIL TABNUM DO BEGIN
00520 IF NAMES[I]=0 THEN DONE;
00530 J←(IN1[I] LAND '77);K←(IN2[I] LAND '77);
00540 IF (IN3[I]=0) THEN READ1←" "
00550 ELSE READ1←CVXSTR(INNAM[IN3[I] LAND '77])[1 TO 5];
00560 IF (IN4[I]=0) THEN READ2←" " ELSE
00570 READ2←CVXSTR(INNAM[IN4[I] LAND '77])[1 TO 5];
00580 OUT(CHAN2,CVXSTR(NAMES[I])&TB&CVXSTR(PARENN[I])&TB&
00590 CVXSTR(OUT1[I])&CVS(LDB(POINT(9,LEVEL[I],8)))&" "&
00600 CVXSTR(OUT2[I])&CVS(LDB(POINT(9,LEVEL[I],17)))&" ");
00610 IF OUT3[I]=0 THEN OUT(CHAN2," ") ELSE
00620 OUT(CHAN2,CVXSTR(OUT3[I])&CVS(LDB(POINT(9,LEVEL[I],26)))&" ");
00630 IF OUT4[I]=0 THEN OUT(CHAN2," ") ELSE
00640 OUT(CHAN2,CVXSTR(OUT4[I])&CVS(LDB(POINT(9,LEVEL[I],35)))&" ");
00650 OUT(CHAN2,CVXSTR(INNAM[J])[1 TO 5]&CVXSTR(INNAM[K])[1 TO 5]
00660 &READ1&READ2&CRLF); END;
00670 RELEASE(CHAN2);
00680 OUTSTR("Documents TABHED.DAT and TABLES.DOC have been created"&CRLF);
00690
00700 END "MAKE";